﻿/*   
    Copyright (C) 2009 Galaktika Corporation ZAO

    This file is a part of Galaktika.BusinessMonitor
 
    Galaktika.BusinessMonitor is a free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.
      
    You should have received a copy of the GNU General Public License
    along with Galaktika.BusinessMonitor.  If not, see <http://www.gnu.org/licenses/>.
  
    If GPL v.3 is not suitable for your products or company,
    Galaktika Corp provides Galaktika.BusinessMonitor under a flexible commercial license
    designed to meet your specific usage and distribution requirements.
    If you have already obtained a commercial license from Galaktika Corp,
    you can use this file under those license terms.
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Galaktika.BI.Extensibility.Dom;
using Galaktika.BI.Runtime;
using Galaktika.BI.Runtime.Services;
using System.ComponentModel;

namespace Galaktika.BI.Silverlight.Controls
{
    public partial class SimpleModifier : UserControl, IBindableObject, IEditableObject
    {
        public SimpleModifier()
        {
            InitializeComponent();
        }

        public string ACaption
        {
            get; set;
        }

        private string m_VarName;
        public string AVariableName
        {
            get
            {
                return m_VarName;
            }
            set
            {
                m_VarName = value;
            }
        }

        private void ApplyButton_Click(object sender, RoutedEventArgs e)
        {
            string newValue = MemoControl.Text;
            IExecutionContext exe = (IExecutionContext)this.Context.Services.GetService(typeof(IExecutionContext));
            IUserTaskManager userTaskManager = (IUserTaskManager)this.Context.Services.GetService(typeof(IUserTaskManager));
            if (exe != null && userTaskManager != null)
            {
                userTaskManager.RunTaskAsync(String.Format(Localization.AppTask_ExecutingServiceCommand,"Modify variable"), state=>
                                                                                                                               {
                                                                                                                                   exe.ModifyVariable(this.Context, m_VarName, newValue);
                                                                                                                               });
            }
        }

        private void CheckButton_Checked(object sender, RoutedEventArgs e)
        {
            if (this.CheckButton.IsChecked != null && this.CheckButton.IsChecked.Value)
                this.MemoControl.TextWrapping = TextWrapping.Wrap;
            else
                this.MemoControl.TextWrapping = TextWrapping.NoWrap;
        }

        #region IBindableObject Members

        public IBindingContext Context { get; set; }

        private IDictionary<string, IBindingManager> m_Bindings;
        public IDictionary<string, IBindingManager> Bindings
        {
            get
            {
                if (m_Bindings == null)
                {
                    m_Bindings = new SafeDictionary<string, IBindingManager>();
                }

                return m_Bindings;
            }
        }

        #endregion

        #region IEditableObject Members

        public void BeginEdit()
        {
           
        }

        public void CancelEdit()
        {
            
        }

        public void EndEdit()
        {
            this.LabelControl.Content = this.ACaption;
            IExecutionContext exe = (IExecutionContext)this.Context.Services.GetService(typeof(IExecutionContext));
            IUserTaskManager userTaskManager = (IUserTaskManager)this.Context.Services.GetService(typeof(IUserTaskManager));
            if (exe != null && userTaskManager != null)
            {
                userTaskManager.RunTaskAsync(String.Format(Localization.AppTask_ExecutingServiceCommand,"Get variable"), state =>
                                                                                                                            {
                                                                                                                                BrickVariable var = exe.GetVariable(this.Context, m_VarName, true);
                                                                                                                                
                                                                                                                                userTaskManager.Dispatcher.BeginInvoke(() =>
                                                                                                                                                                           {
                                                                                                                                                                               MemoControl.Text = var.CurrentValue;
                                                                                                                                                                           });
                                                                                                                            });
                
            }
        }

        #endregion
    }
}
